package com.demo.arch.datapulsedemo.v2_pipeline.core;

/**
 * 步骤处理器接口
 * 
 * 核心思想：
 * - 每个步骤实现此接口
 * - 处理自己的业务逻辑
 * - 更新PipelineContext中的数据
 * - 支持幂等性检查
 * 
 * @author DataPulse Team
 */
public interface StepHandler {

  /**
   * 步骤名称
   * 用于日志和监控
   */
  String getName();

  /**
   * 执行步骤
   * 
   * @param context 流程上下文
   * @throws StepExecutionException 步骤执行失败
   */
  void handle(PipelineContext context) throws StepExecutionException;

  /**
   * 是否需要执行（幂等性检查）
   * 
   * 默认实现：总是执行
   * 子类可以重写此方法，实现幂等性检查
   * 
   * @param context 流程上下文
   * @return true-需要执行，false-跳过执行
   */
  default boolean shouldExecute(PipelineContext context) {
    return true;
  }

  /**
   * 步骤执行顺序
   * 数字越小，优先级越高
   * 
   * @return 执行顺序
   */
  default int getOrder() {
    return 0;
  }
}
